package org.batatasframework.properties.beans;

import java.util.ArrayList;
import java.util.List;

import org.batatasframework.expression.ExpressionClause;
import org.batatasframework.properties.ProperitesGroup;
import org.batatasframework.properties.PropertiesDefine;
import org.batatasframework.properties.PropertiesName;
import org.batatasframework.values.AbstractValueReader;
import org.batatasframework.values.ValueGetter;

public class InternalPropertiesDefine extends AbstractValueReader implements PropertiesDefine{

	final List<ExpressionClause> expressions = new ArrayList<>();
	
	/** 
	 * 这里就是使用"[]"进行分隔的组，每个组的组名里，是可以定义其它一些信息的 ；
	 * 可以直接通过String类型的属性来取得对应的PropertiesName的值的
	 */
	final List<ProperitesGroup> internalGroups = new ArrayList<>();
	
	/** 定义的名称，可能会包含参数，至于这些参数如何使用，则应该由具体处理的方法来决定 */
	final PropertiesName name;

	public InternalPropertiesDefine(PropertiesName name){
		this.name = name;
	}
	
	public List<ExpressionClause> getExpressions() {
		return expressions;
	}
	
	@Override
	public PropertiesName getName() {
		return name;
	}

	@Override
	public ProperitesGroup getGroup(String name){
		for(ProperitesGroup pg : internalGroups){
			if(pg.is(name)) return pg;
		}
		
		return ProperitesGroup.NULL;
	}
	
	public ExpressionClause getExpression(String name){
		for(ExpressionClause se : expressions){
			if(se.is(name)) return se;
		}
		return ExpressionClause.NULL;
	}
	
	@Override
	public ValueGetter getValue(String propertyName){
		return getExpression(propertyName).getValue();
	}

	public void addGroup(ProperitesGroup pg) {
		internalGroups.add(pg);
	}
	
}